home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 11 / Info-Mac_XI_Disc_1.cdr_ / Info-Mac XI Disc 1.cdr / Programs / Science & Math / MacEspresso 1.0 / espresso / map.c < prev    next >
Encoding:
C/C++ Source or Header  |  1989-02-26  |  2.9 KB  |  107 lines  |  [TEXT/R*ch]

  1. #include "espresso.h"
  2.  
  3. static pcube Gcube;
  4. static pset Gminterm;
  5.  
  6. pset minterms(T)
  7. pcover T;
  8. {
  9.     int size, var;
  10.     register pcube last;
  11.  
  12.     size = 1;
  13.     for(var = 0; var < cube.num_vars; var++)
  14.     size *= cube.part_size[var];
  15.     Gminterm = set_new(size);
  16.  
  17.     foreach_set(T, last, Gcube)
  18.     explode(cube.num_vars-1, 0);
  19.  
  20.     return Gminterm;
  21. }
  22.  
  23.  
  24. void explode(var, z)
  25. int var, z;
  26. {
  27.     int i, last = cube.last_part[var];
  28.     for(i=cube.first_part[var], z *= cube.part_size[var]; i<=last; i++, z++)
  29.     if (is_in_set(Gcube, i))
  30.         if (var == 0)
  31.         set_insert(Gminterm, z);
  32.         else
  33.         explode(var-1, z);
  34. }
  35.  
  36.  
  37. static int mapindex[16][16] = {
  38.      0,  1,  3,  2,   16, 17, 19, 18,      80, 81, 83, 82,   64, 65, 67, 66,
  39.      4,  5,  7,  6,   20, 21, 23, 22,      84, 85, 87, 86,   68, 69, 71, 70,
  40.     12, 13, 15, 14,   28, 29, 31, 30,      92, 93, 95, 94,   76, 77, 79, 78,
  41.      8,  9, 11, 10,   24, 25, 27, 26,      88, 89, 91, 90,   72, 73, 75, 74,
  42.  
  43.     32, 33, 35, 34,   48, 49, 51, 50,     112,113,115,114,   96, 97, 99, 98,
  44.     36, 37, 39, 38,   52, 53, 55, 54,     116,117,119,118,  100,101,103,102,
  45.     44, 45, 47, 46,   60, 61, 63, 62,     124,125,127,126,  108,109,111,110,
  46.     40, 41, 43, 42,   56, 57, 59, 58,     120,121,123,122,  104,105,107,106,
  47.  
  48.  
  49.    160,161,163,162,  176,177,179,178,     240,241,243,242,  224,225,227,226,
  50.    164,165,167,166,  180,181,183,182,     244,245,247,246,  228,229,231,230,
  51.    172,173,175,174,  188,189,191,190,     252,253,255,254,  236,237,239,238,
  52.    168,169,171,170,  184,185,187,186,     248,249,251,250,  232,233,235,234,
  53.  
  54.    128,129,131,130,  144,145,147,146,     208,209,211,210,  192,193,195,194,
  55.    132,133,135,134,  148,149,151,150,     212,213,215,214,  196,197,199,198,
  56.    140,141,143,142,  156,157,159,158,     220,221,223,222,  204,205,207,206,
  57.    136,137,139,138,  152,153,155,154,     216,217,219,218,  200,201,203,202
  58. };
  59.  
  60. #define POWER2(n) (1 << n)
  61. void map(T)
  62. pcover T;
  63. {
  64.     int j, k, l, other_input_offset, output_offset, outnum, ind;
  65.     int largest_input_ind,  numout;
  66.     char c;
  67.     pset m;
  68.     bool some_output;
  69.  
  70.     m = minterms(T);
  71.     largest_input_ind = POWER2(cube.num_binary_vars);
  72.     numout = cube.part_size[cube.num_vars-1];
  73.  
  74.     for(outnum = 0; outnum < numout; outnum++) {
  75.     output_offset = outnum * largest_input_ind;
  76.     printf("\n\nOutput space # %d\n", outnum);
  77.     for(l = 0; l <= MAX(cube.num_binary_vars - 8, 0); l++) {
  78.         other_input_offset = l * 256;
  79.         for(k = 0; k < 16; k++) {
  80.         some_output = FALSE;
  81.         for(j = 0; j < 16; j++) {
  82.             ind = mapindex[k][j] + other_input_offset;
  83.             if (ind < largest_input_ind) {
  84.             c = is_in_set(m, ind+output_offset) ? '1' : '.';
  85.             putchar(c);
  86.             some_output = TRUE;
  87.             }
  88.             if ((j+1)%4 == 0)
  89.             putchar(' ');
  90.             if ((j+1)%8 == 0)
  91.             printf("  ");
  92.         }
  93.         if (some_output)
  94.             putchar('\n');
  95.         if ((k+1)%4 == 0) {
  96.             if (k != 15 && mapindex[k+1][0] >= largest_input_ind)
  97.             break;
  98.             putchar('\n');
  99.         }
  100.         if ((k+1)%8 == 0)
  101.             putchar('\n');
  102.         }
  103.     }
  104.     }
  105.     set_free(m);
  106. }
  107.